module SinglePortRamRW (
        input      sys_clk,
        input      sys_rst_n,

        // 从单端口ram读取数据
        input [7:0] read_data,

        // 给单端口的
        // ram使能
        output ramEn,
        // ram写使能,1写0读
        output writeEn,
        // 读写地址,0~31
        output reg [4:0] addr,
        // 写入数据
        output reg [7:0] write_data
    );

    // 读写计数
    reg [5:0] rwCount;

    // 只要没有按下复位,就是使能
    assign ramEn = sys_rst_n;

    // 当计数器在0~31时为写,32~63为读
    assign writeEn = ramEn && (rwCount<=6'd31);

    // 读写计数
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if(!sys_rst_n)
            rwCount<=6'd0;
        else if(rwCount<6'd63 && ramEn)
            // 平时正常递增
            rwCount<=rwCount+6'd1;
        else
            rwCount<=6'd0;
    end

    // 读写地址,0~31
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if(!sys_rst_n)
            addr<=5'd0;
        else if(addr<5'd31 && ramEn)
            addr<=addr+5'd1;
        else
            addr<=5'd0;
    end

    // 写入数据,0~31
    always @(posedge sys_clk or negedge sys_rst_n) begin
        if(!sys_rst_n)
            write_data<=8'd0;
        else if(writeEn && write_data<8'd31)
            write_data<=8'd1+write_data;
        else
            write_data<=8'd0;
    end


endmodule
